<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>histogram(直方图)数据类型 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'histogram.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/histogram.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/histogram.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/histogram.html" rel="nofollow" target="_blank">../en/histogram.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="mapping.html">映射</a></span>
»
<span class="breadcrumb-link"><a href="mapping-types.html">字段数据类型</a></span>
»
<span class="breadcrumb-node">histogram(直方图)数据类型</span>
</div>
<div class="navheader">
<span class="prev">
<a href="dense-vector.html">« dense_vector(密集矢量)数据类型</a>
</span>
<span class="next">
<a href="flattened.html">flattened(扁平)数据类型 »</a>
</span>
</div>
<div class="section xpack">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="histogram"></a>histogram(直方图)数据类型
</h2>
</div></div></div>

<p>
一种存储表示直方图的预聚合数值数据的字段。

该数据使用两个成对的数组来定义：
</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
一个名为<code class="literal">values</code>的<a class="xref" href="number.html" title="numeric 数据类型" rel="nofollow"><code class="literal">double</code></a>类型值的数组，表示直方图的桶。

这些值必须按升序提供。
</li>
<li class="listitem">
一个名为<code class="literal">counts</code>的与 values 中的值相对应的<a class="xref" href="number.html" title="Numeric 数值类型" rel="nofollow"><code class="literal">integer</code></a>数组，表示每个桶中有多少个值。

这些数字必须是正数或零。
</li>
</ul>
</div>
<p>因为<code class="literal">values</code>数组中的元素对应于<code class="literal">counts</code>数组中相同位置的元素，所以这两个数组的长度必须相同。
</p>
<div class="important admon">
<div class="icon"></div>
<div class="admon_content">
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="literal">histogram</code>字段只能为每个文档存储一对<code class="literal">values</code>和<code class="literal">counts</code>数组。

不支持嵌套数组。
</li>
<li class="listitem">
<code class="literal">histogram</code>字段不支持排序。
</li>
</ul>
</div>
</div>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="histogram-uses"></a>使用
</h3>
</div></div></div>
<p>
<code class="literal">histogram</code>字段主要用于聚合。

为了使聚合更容易访问<code class="literal">histogram</code>类型字段的数据，<code class="literal">histogram</code>字段数据存储为二进制<a class="xref" href="doc-values.html" title="doc_values" rel="nofollow">文档值(doc_values)</a>，且不会进行索引。

它的字节大小最多为<code class="literal">13 * numValues</code>，其中<code class="literal">numValues</code>是所给定数组的长度。
</p>
<p>因为数据没有进行索引，所以只能对以下聚合和查询使用<code class="literal">histogram</code>字段：</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<a class="xref" href="search-aggregations-metrics-percentile-aggregation.html" title="百分位数聚合">percentiles</a>(百分位数)聚合
</li>
<li class="listitem">
<a class="xref" href="search-aggregations-metrics-percentile-rank-aggregation.html" title="百分位数等级聚合">percentile ranks</a>(百分位数等级)聚合
</li>
<li class="listitem">
<a class="xref" href="search-aggregations-metrics-boxplot-aggregation.html" title="Boxplot Aggregation">boxplot</a>(箱线图聚集)聚合
</li>
<li class="listitem">
<a class="xref" href="query-dsl-exists-query.html" title="存在查询">exists</a>(存在)查询
</li>
</ul>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="mapping-types-histogram-building-histogram"></a>构建一个直方图
</h3>
</div></div></div>
<p>
当使用直方图作为聚合的一部分时，结果的准确性将取决于直方图的构造方式。

重要的是要考虑将用于构建它的百分位数聚合模式。 

一些可能性包括:
</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
对于<a class="xref" href="search-aggregations-metrics-percentile-aggregation.html" title="百分位数聚合">T-Digest</a>模式，<code class="literal">values</code>数组表示平均质心位置，<code class="literal">counts</code>数组表示归属于每个质心的值的数量。

如果算法已经开始逼近百分位数，这种不准确性会在直方图中延续。
</li>
<li class="listitem">
对于<a class="xref" href="search-aggregations-metrics-percentile-aggregation.html#_hdr_histogram" title="HDR 直方图">高动态范围(HDR)</a>直方图模式，<code class="literal">values</code>数组表示每个时段间隔的固定上限，<code class="literal">counts</code>数组表示归属于每个间隔的值的数量。

该实现保持固定的最坏情况百分比误差(指定为有效数字的数量)，因此生成直方图时使用的值将是你在聚合时可以达到的最大精度。
</li>
</ul>
</div>
<p>
直方图字段是“算法不可知的”，不存储特定于 T-Digest 或 HDRHistogram 的数据。

虽然这意味着该字段在技术上可以使用任何一种算法进行聚合，但在实践中，用户应该选择一种算法并以这种方式索引数据(例如 T-Digest 的质心或 HDRHistogram 的区间)以确保最佳准确性。
</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="histogram-ex"></a>示例
</h3>
</div></div></div>
<p>下面的<a class="xref" href="indices-create-index.html" title="创建索引API" rel="nofollow">创建索引(create index)</a>API 请求创建了一个具有两个字段映射的新索引：</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<code class="word">my_histogram</code>，一个<code class="literal">histogram</code>类型的字段，用于存储百分位数数据
</li>
<li class="listitem">
<code class="word">my_text</code>，一个<code class="literal">keyword</code>类型的字段，用于存储直方图的标题
</li>
</ul>
</div>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT my_index
{
  "mappings": {
    "properties": {
      "my_histogram": {
        "type" : "histogram"
      },
      "my_text" : {
        "type" : "keyword"
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/627.console"></div>
<p>
下面的 <a class="xref" href="docs-index_.html" title="index API" rel="nofollow">编制索引(index)</a> API 请求存储两个直方图的预聚合：<code class="word">histogram_1</code>和<code class="word">histogram_2</code>。
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT my_index/_doc/1
{
  "my_text" : "histogram_1",
  "my_histogram" : {
      "values" : [0.1, 0.2, 0.3, 0.4, 0.5], <a id="CO295-1"></a><i class="conum" data-value="1"></i>
      "counts" : [3, 7, 23, 12, 6] <a id="CO295-2"></a><i class="conum" data-value="2"></i>
   }
}

PUT my_index/_doc/2
{
  "my_text" : "histogram_2",
  "my_histogram" : {
      "values" : [0.1, 0.25, 0.35, 0.4, 0.45, 0.5], <a id="CO295-3"></a><i class="conum" data-value="1"></i>
      "counts" : [8, 17, 8, 7, 6, 2] <a id="CO295-4"></a><i class="conum" data-value="2"></i>
   }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/628.console"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO295-1"><i class="conum" data-value="1"></i></a><a href="#CO295-3"></a></p>
</td>
<td align="left" valign="top">
<p>
每个桶的值。

数组中的值被视为双精度值，必须按升序排列。

对于<a class="xref" href="search-aggregations-metrics-percentile-aggregation.html#search-aggregations-metrics-percentile-aggregation-approximation" title="百分位数(通常)是近似值">T-Digest</a>直方图，该值代表平均值。

在 HDR 直方图的情况下，这表示迭代的值。
</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO295-2"><i class="conum" data-value="2"></i></a><a href="#CO295-4"></a></p>
</td>
<td align="left" valign="top">
<p>
每个桶中的计数。

数组中的值被视为整数，并且必须是正数或零。

负值将被拒绝。

桶和计数之间的关系由数组中的位置给出。
</p>
</td>
</tr>
</table>
</div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="dense-vector.html">« dense_vector(密集矢量)数据类型</a>
</span>
<span class="next">
<a href="flattened.html">flattened(扁平)数据类型 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>